home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / lib / pymodules / python2.6 / fstab.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2009-10-28  |  8KB  |  199 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import os
  5. import re
  6. import tempfile
  7.  
  8. class Line(object):
  9.     '''A line in an /etc/fstab line.
  10.  
  11.     Lines may or may not have a filesystem specification in them. The
  12.     has_filesystem method tells the user whether they do or not; if they
  13.     do, the attributes device, directory, fstype, options, dump, and
  14.     fsck contain the values of the corresponding fields, as instances of
  15.     the sub-classes of the LinePart class. For non-filesystem lines,
  16.     the attributes have the None value.
  17.     
  18.     Lines may or may not be syntactically correct. If they are not,
  19.     they are treated as as non-filesystem lines.
  20.     
  21.     '''
  22.     attrs = ('ws1', 'device', 'ws2', 'directory', 'ws3', 'fstype')
  23.     attrs += ('ws4', 'options', 'ws5', 'dump', 'ws6', 'fsck', 'ws7')
  24.     
  25.     def __init__(self, raw):
  26.         self.dict = { }
  27.         self.raw = raw
  28.  
  29.     
  30.     def __getattr__(self, name):
  31.         if name in self.dict:
  32.             return self.dict[name]
  33.         raise AttributeError(name)
  34.  
  35.     
  36.     def __setattr__(self, name, value):
  37.         forbidden = ('dict', 'dump', 'fsck', 'options')
  38.         if name not in forbidden and name in self.dict:
  39.             if self.dict[name] is None:
  40.                 raise Exception('Cannot set attribute %s when line dies not contain filesystem specification' % name)
  41.             self.dict[name] is None
  42.             self.dict[name] = value
  43.         else:
  44.             object.__setattr__(self, name, value)
  45.  
  46.     
  47.     def get_dump(self):
  48.         return int(self.dict['dump'])
  49.  
  50.     
  51.     def set_dump(self, value):
  52.         self.dict['dump'] = str(value)
  53.  
  54.     dump = property(get_dump, set_dump)
  55.     
  56.     def get_fsck(self):
  57.         return int(self.dict['fsck'])
  58.  
  59.     
  60.     def set_fsck(self, value):
  61.         self.dict['fsck'] = str(value)
  62.  
  63.     fsck = property(get_fsck, set_fsck)
  64.     
  65.     def get_options(self):
  66.         return self.dict['options'].split(',')
  67.  
  68.     
  69.     def set_options(self, list):
  70.         self.dict['options'] = ','.join(list)
  71.  
  72.     options = property(get_options, set_options)
  73.     
  74.     def set_raw(self, raw):
  75.         match = False
  76.         if raw.strip() != '' and not raw.strip().startswith('#'):
  77.             pat = '^(?P<ws1>\\s*)'
  78.             pat += '(?P<device>\\S*)'
  79.             pat += '(?P<ws2>\\s+)'
  80.             pat += '(?P<directory>\\S+)'
  81.             pat += '(?P<ws3>\\s+)'
  82.             pat += '(?P<fstype>\\S+)'
  83.             pat += '(?P<ws4>\\s+)'
  84.             pat += '(?P<options>\\S+)'
  85.             pat += '(?P<ws5>\\s+)'
  86.             pat += '(?P<dump>\\d+)'
  87.             pat += '(?P<ws6>\\s+)'
  88.             pat += '(?P<fsck>\\d+)'
  89.             pat += '(?P<ws7>\\s*)$'
  90.             match = re.match(pat, raw)
  91.             if match:
  92.                 (self.dict.update,)((lambda .0: for attr in .0:
  93. (attr, match.group(attr)))(self.attrs))
  94.             
  95.         
  96.         if not match:
  97.             self.dict.update((lambda .0: for attr in .0:
  98. (attr, None))(self.attrs))
  99.         
  100.         self.dict['raw'] = raw
  101.  
  102.     
  103.     def get_raw(self):
  104.         if self.has_filesystem():
  105.             return (''.join,)((lambda .0: for attr in .0:
  106. self.dict[attr])(self.attrs))
  107.         return self.dict['raw']
  108.  
  109.     raw = property(get_raw, set_raw)
  110.     
  111.     def has_filesystem(self):
  112.         '''Does this line have a filesystem specification?'''
  113.         return self.device is not None
  114.  
  115.  
  116.  
  117. class Fstab(object):
  118.     '''An /etc/fstab file.'''
  119.     
  120.     def __init__(self):
  121.         self.lines = []
  122.  
  123.     
  124.     def open_file(self, filespec, mode):
  125.         if type(filespec) in (str, unicode):
  126.             return file(filespec, mode)
  127.         return filespec
  128.  
  129.     
  130.     def close_file(self, f, filespec):
  131.         if type(filespec) in (str, unicode):
  132.             f.close()
  133.         
  134.  
  135.     
  136.     def get_perms(self, filename):
  137.         return os.stat(filename).st_mode
  138.  
  139.     
  140.     def chmod_file(self, filename, mode):
  141.         os.chmod(filename, mode)
  142.  
  143.     
  144.     def link_file(self, oldname, newname):
  145.         if os.path.exists(newname):
  146.             os.remove(newname)
  147.         
  148.         os.link(oldname, newname)
  149.  
  150.     
  151.     def rename_file(self, oldname, newname):
  152.         os.rename(oldname, newname)
  153.  
  154.     
  155.     def read(self, filespec):
  156.         '''Read in a new file.
  157.         
  158.         If filespec is a string, it is used as a filename. Otherwise
  159.         it is used as an open file.
  160.         
  161.         The existing content is replaced.
  162.         
  163.         '''
  164.         f = self.open_file(filespec, 'r')
  165.         lines = []
  166.         for line in f:
  167.             lines.append(Line(line))
  168.         
  169.         self.lines = lines
  170.         self.close_file(filespec, f)
  171.  
  172.     
  173.     def write(self, filespec):
  174.         '''Write out a new file.
  175.         
  176.         If filespec is a string, it is used as a filename. Otherwise
  177.         it is used as an open file.
  178.         
  179.         '''
  180.         if type(filespec) in (str, unicode):
  181.             dirname = os.path.dirname(filespec)
  182.             prefix = os.path.basename(filespec) + '.'
  183.             (fd, tempname) = tempfile.mkstemp(dir = dirname, prefix = prefix)
  184.             os.close(fd)
  185.         else:
  186.             tempname = filespec
  187.         f = self.open_file(tempname, 'w')
  188.         for line in self.lines:
  189.             f.write(line.raw)
  190.         
  191.         self.close_file(filespec, f)
  192.         if type(filespec) in (str, unicode):
  193.             self.chmod_file(tempname, self.get_perms(filespec))
  194.             self.link_file(filespec, filespec + '.bak')
  195.             self.rename_file(tempname, filespec)
  196.         
  197.  
  198.  
  199.